1. Field of the Invention
The present invention relates to packet transmission and, particularly, to a system and method for optimizing a jitter buffer.
2. Description of the Related Art
When sending voice data across packet networks, such as telephony over LAN (ToL) or Voice over IP (VoIP) networks, the voice is usually compressed, packetized and, finally, sent across the network to the destination. When the packets are sent into the network, they are generated at a constant rate. However, due to behavior of the packet network, the even time intervals between the packets are lost as the packets transit the network. This irregularity in packet separation is referred to as xe2x80x9cjitter.xe2x80x9d Jitter can cause clicks, delays and other annoyances in multimedia transmission, creating overall poor reproduction quality.
A jitter buffer is often used to even out the packet separation. A jitter buffer is a FIFO (first in, first out) buffer in which packets leave the buffer at a predetermined, constant rate. Minimizing the amount of actual jitter buffering is important because the jitter buffering process introduces delays in the reproduced signal. Excessive buffering delays transmission output, while under-buffering causes gaps in the data.
Jitter rates vary throughout a transmission sequence. A jitter rate is the average variance in packet arrival times. It is measured as packets arrive over a specific implementation defined interval. The actual jitter rate reported (in accordance with IETF RFC 1889) is an exponentially averaged value of the jitter for each packet over the interval. The distribution of the averaged jitter rate is significantly different from the actual jitter values, so common queueing theory solutions are not applicable.
A Jitter Buffer designed with a constant predetermined depth is referred to as a Static Jitter Buffer. A Static Jitter Buffer does not recognize each sequence""s unique jitter characteristics and can not adjust itself to meet the needs of individual sequences. The inflexibility of the Static Jitter Buffer degrades the smoothing capability of the jitter buffering process, thereby failing to provide sufficient buffering for some sequences while unnecessarily delaying others.
These and other drawbacks in the prior art are overcome in large part by a system and method according to the present invention. A jitter buffer controller according to the present invention allows the depth of the jitter buffer to be adjusted dynamically according to the varying jitter of the current sequence. The jitter buffer controller maintains a cache of previous jitter values. This cache contains exponentially averaged values that represent the long-term behavior of specific destination""s jitter characteristics, i.e., a jitter characteristic memory. These values are used to initialize the jitter buffer""s depth. The jitter cache prevents the buffer""s depth from being initialized with an arbitrary value that disregards the specific destination""s past jitter characteristics.
The jitter buffer controller uses two main variables to adjust the depth of the jitter buffer: current_depth and rise. The current_depth accounts for the current jitter while the rise xe2x80x9ccushionsxe2x80x9d increases to the depth as a result of having a history of past jitter. These two variables are used to create a more accurate depth that is adaptive to varying jitter rates. The jitter buffer depth can change throughout a single data sequence based on the variance of the effective jitter.